Demad Paging

페이징 시스템과 공유 메모리
프로세스간 동일한 물리 주소를 가리킬 수 있다.(공간 절약, 메모리 할당 시간 절약)

fork()를 통해서 멀티 프로세스를 만들었을 때, 커널 공간의 메모리는 서로 공유된다.
Process A’s page table과 A의 child process인 B’s page table의 공유된 공간은 서로 같은 physical memory를 가르킨다.

기술적으로 보면, 커널 메모리 1GB는 모두 physical 공간에서 같은 공간을 가르킨다.
실제로 멀티 프로세스로 parent process에 대한 child process를 fork를 통해서 생성할 때, 모든 데이터를 복사하지 않는다.
가상 메모리에서 서로 같은 physical memory address를 포인팅하도록 만들어둔다.(프로세스의 생성 시간 감소 시키기 위해)
커널 공유메모리든 공유데이타는 물리메모리 공간 항상 공유->공간 절약

물리 주소에 데이터 수정 시도시, 물리 주소를 복사한다.(copy-on-write)
parent process의 데이터를 복사해서 physical memory에 따로 생성하고 각각의 프로세스의 테이블이 각자의 공간을 포인트
요구 페이지 Demanding paging(Demanded paging)
프로세스의 모든 데이터를 메모리에 적재하지 않고, 실행 중 필요한 시점에서만 메모리에 적재
    선행 페이징(anticipatory paging or prepaging)의 반대 개념: 미리 프로세스에 관련 모든 데이터를 메모리에 올려놓고 실행
    더 이상 필요하지 않은 페이지 플레임은 다시 저장매체에 저장(페이지 교체 알고리즘 필요)

선행 페이징 기법은 현실성은 없음
페이지 폴트(page fault)
어떤 페이지가 실제 물리메모리에 없을 때 일어나는 인터럽트
운영체제가 page fault가 일어나면, 해당 페이지를 물리 메모리에 올린다.
페이지 폴트와 인터럽트
1. CPU MMU에 Virtual address 전달
2. MMU는 TLB에 해당 Virtual address에 대한 Physical address 유/무 확인(전달 캐슁)
3. TLB에 없을 경우 CR3를 통해 page table에 접근
4. 해당 Virtual memory에 대한 valid/invalid확인 후 valid인 경우 physical address 가지고 온다.
    physical address에 대한 memory data CPU에 전달
5. invalid인 경우 page fault interrupt 발생(OS page fault interrupt handling)
6. page block을 저장매체에서 찾는다.(OS)
7. 해당 프로세스 데이터를 메모리에 load(update)-page table valid로 수정
페이지 폴트를 막기위해서
실행되기 전에 해당 페이지를 모두 물리 메모리에 올려야 한다면 실행 하기까지 오랜 시간이 소요된다.
향후 실행/ 참조될 코드/ 데이터를 미리 물리 메모리에 올리는 것 또한 미리 예측하는 것이 쉽지 않다.
lazy allocation
최대한 할당을 지연
실행파일 in SSD/HDD(저장매체)를 실행시 물리 메모리에 demand paging 하여야 하는데 위 작업을 최대한 늦게 한다.
(해당 코드가 실행될 때, 페이지 폴트 후, 데이터 upload)